package com.dongdongshop.service.impl;

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.dongdongshop.service.SmsService;
import com.google.gson.Gson;
import org.springframework.stereotype.Service;

import java.util.Map;


/*
 * 发送短信
 * */
@Service
public class SmsServiceImpl implements SmsService {

    // 设置鉴权参数，初始化客户端
    private DefaultProfile profile = DefaultProfile.getProfile(//是一个new对象 用了get方法 工厂设计模式
            "cn-qingdao",// 地域ID  new对象里得三个参数
            "LTAI4GGVDj2itAnhTMPvRc1L",// 您的AccessKey ID
            "C8LyU35VquqHEdAUPIQv0xKxtrczoU");// 您的AccessKey Secret
    private IAcsClient client = new DefaultAcsClient(profile);//发短信得客服端
//以上是调用aliyun，证明你在阿里云上面有账户

    private static void log_print(String functionName, Object result) {//打印日志用得
        Gson gson = new Gson();
        System.out.println("-------------------------------" + functionName + "-------------------------------");
        System.out.println(gson.toJson(result));//将gson转换成Json格式
    }

    /**
     * 发送短信
     */
    @Override
    public void sendSms(String phoneNum,String code) throws ClientException {
        CommonRequest request = new CommonRequest();
        request.setSysDomain("dysmsapi.aliyuncs.com");//域名 阿里大于
        request.setSysVersion("2017-05-25");//上面域名调用的版本号
        request.setSysAction("SendSms");//"SendSms"这个单词传过去就代表发送短信
        // 接收短信的手机号码
        request.putQueryParameter("PhoneNumbers", phoneNum);//controller传来的phoneNum要提出来
        // 短信签名名称。请在控制台签名管理页面签名名称一列查看（必须是已添加、并通过审核的短信签名）。
        request.putQueryParameter("SignName", "顺顺通1号");
        // 短信模板ID
        request.putQueryParameter("TemplateCode", "SMS_194026835");
        // 短信模板变量对应的实际值，JSON格式。
        request.putQueryParameter("TemplateParam", "{\"sms_code\":"+code+"}");

        CommonResponse commonResponse = client.getCommonResponse(request);//客服端调用get..方法吧requset传进去自动发送 得到返回值（成功失败）

        String data = commonResponse.getData();//获取返回的状态
        String sData = data.replaceAll("'\'", "");
        log_print("sendSms", sData);

        Gson gson = new Gson();
        Map map = gson.fromJson(sData, Map.class);//将上面的返回值转成map格式
        Object bizId = map.get("BizId");
        System.out.println("BizId : "+bizId.toString());
    }
}
